/*
** ---> This Test State is testing the following behaviours
** ---> Flock, Separation, Cohesion, Align, VelocityMatch
**
** ---> Louie
*/

#ifndef MARCO_TEST_STATE_H
#define MARCO_TEST_STATE_H

#include "GameState.h"
#include "Singleton.h"
#include "GameCamera.h"
#include "Unit.h"
#include "Flock.h"
#include "AgentGroup.h"

class MarcoTestState : public Engine::GameState, public Engine::NonCopyable
{
	private:
		friend class Engine::Singleton <MarcoTestState>;
		unsigned int m_hash;//hash stored once so it wont have to be calced each time 

		MarcoTestState();

		Engine::Unit m_unitArray[5];
		Engine::AgentGroup m_agentGroup;

		Engine::Unit m_wanderer;

		void CreateGroup();
		void CreateWanderer();

	public:
		//inherited from GameState
		virtual const char* GetName() const override {return "MarcoTestState";}
		virtual unsigned int GetHash() const override {return m_hash;}
		virtual void Activate() override;
		virtual void Update() override;
		virtual void Draw() override;
		virtual void Deactivate() override;
		virtual void OnKeyboardEvent(const SDL_KeyboardEvent& k) override;
		virtual void OnQuit() override;
};

typedef Engine::Singleton <MarcoTestState> TheMarcoTestState;

#endif